package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.domain.Schedule;
import com.ruoyi.system.domain.vo.ScheduleVo;

/**
 * 排班管理Service接口
 *
 * @author ruoyi
 */
public interface IScheduleService {

    public List<Schedule> queryScheduleList(Schedule schedule);

    /**
     * 查询排班信息列表
     *
     * @param schedule 排班信息
     * @return 排班信息集合
     */
    public List<Schedule> selectScheduleList(Schedule schedule);

    /**
     * 获取推荐的算法参数
     *
     * @return 算法参数
     */
    public Map<String, Object> getRecommendedAlgorithmParams();

    /**
     * 生成智能排班
     *
     * @param params 排班参数
     * @return 结果
     */
    public boolean generateSchedule(Map<String, Object> params);

    /**
     * 调整排班
     *
     * @param params 调整参数
     * @return 结果
     */
    public boolean adjustSchedule(Map<String, Object> params);

    /**
     * 获取警员出勤统计
     *
     * @param officerId 警员ID
     * @return 出勤统计数据
     */
    public Map<String, Object> selectOfficerAttendanceStats(Long officerId);

    /**
     * 批量保存排班信息
     *
     * @param scheduleList 排班信息列表
     * @return 结果
     */
    public boolean batchSaveSchedule(List<Schedule> scheduleList);

    /**
     * 根据日期范围删除排班信息
     *
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 结果
     */
    public boolean deleteScheduleByDateRange(String startDate, String endDate);

    TableDataInfo<ScheduleVo> queryDutyDetails(Schedule schedule, PageQuery pageQuery);

    boolean personAdjust(Schedule schedule);

    boolean delete(Long id);
}
